Lazy i18n watcher on boot and more | This Week in Rails
ActiveSupportに関する変更です
Railsアプリケーションを起動する際に I18n の再読み込みを行なわないようになりました
I18nには翻訳ファイルの変更時に翻訳を自動再読み込みする機能があります
この機能に関する変更は過去のエピソードでも紹介しましたね
そのエピソードでは、この機能が有効になっているときにgem内の翻訳ファイルを監視の対象外とする、という変更を紹介しました
今回のプルリクエストの著者が携わっているアプリケーションには翻訳ファイルが大量にあり、gemファイルを監視対象外になったとしてもまだ遅いそうです
なので今回のプルリクエストで、アプリケーション起動時の再読み込みを無くすことで、起動に掛かる時間を短縮しています
ActionPackに関する変更です
allow_browser メソッドの block オプションにメソッド名を渡せるようになりました
allow_browser メソッドはアクションへのアクセスを許可するブラウザバージョンを指定するメソッドです
code:rb
class ApplicationController < ActionController::Base
allow_browser versions: :modern
end
class ApplicationController < ActionController::Base
allow_browser versions: { safari: 16.4, firefox: 121, ie: false }
end
class MessagesController < ApplicationController
allow_browser versions: { opera: 104, chrome: 119 }, only: :show
end
block オプションにはcallableなオブジェクトを渡せます
code:rb
class ApplicationController < ActionController::Base
allow_browser versions: :modern,
block: -> {
render file: Rails.root.join("public/custom-error.html"),
status: :not_acceptable
}
end
callableなオブジェクトは、ブロックやProcクラスのオブジェクトのことですね
これまでblock オプションで受け取れるのはcallableなオブジェクトだけでしたが、今回のプルリクエストにより、メソッド名を受け取れるようになりました
うえの例を書き換えるとつぎのようになります
code:rb
class ApplicationController < ActionController::Base
allow_browser versions: :modern, block: :handle_outdated_browser
private
def handle_outdated_browser
render file: Rails.root.join("public/custom-error.html"), status: :not_acceptable
end
end
スッキリして見やすいですね